import tensorflow as tf


def run_begin():
    """
    模拟模型训练过程，保存变量到文件
    :return:
    """
    # 创建一个变量, 初始化为标量 0.
    state = tf.Variable(0, name="counter")

    # 创建一个 op, 其作用是使 state 增加 1

    one = tf.constant(1)
    new_value = tf.add(state, one)
    update = tf.assign(state, new_value)

    # 启动图后, 变量必须先经过`初始化` (init) op 初始化,
    # 首先必须增加一个`初始化` op 到图中.
    init_op = tf.global_variables_initializer()

    # 启动图, 运行 op
    with tf.Session() as sess:
        # 运行 'init' op
        sess.run(init_op)
        # 打印 'state' 的初始值
        print(sess.run(state))
        # 运行 op, 更新 'state', 并打印 'state'
        for _ in range(10):
            sess.run(update)
            print(sess.run(state))

            # 输出:

            # 0
            # -->
            # 1
            # 2
            # 3
            # ...
            # 10
        saver = tf.train.Saver([state])
        saver.save(sess, "data_variable/l015_sess.ckpt")  # 保存到文件


def run_continue():
    # 依然需要创建一个变量, 初始化为标量0(但实际这个初始化没有用，仅是声明的变量).
    state = tf.Variable(0, name="counter")

    # 创建一个 op, 其作用是使 state 增加 1

    one = tf.constant(1)
    new_value = tf.add(state, one)
    update = tf.assign(state, new_value)

    # 启动图, 运行 op
    with tf.Session() as sess:
        saver = tf.train.Saver([state])
        saver.restore(sess, "data_variable/l015_sess.ckpt")  # 恢复变量
        #  继续开始训练模型
        # 打印 'state' 的初始值，此时已经拿到恢复的值10
        print(sess.run(state))
        # 运行 op, 更新 'state', 并打印 'state'
        for _ in range(10):
            sess.run(update)
            print(sess.run(state))

            # 输出:

            # 10
            # -->
            # 11
            # 12
            # 13
            # ...
            # 20

if __name__ == "__main__":
    # run_begin()
    run_continue()
